package lock

import (
	"fmt"
	"sync"
	"sync/atomic"
	"time"
)

var (
	sum  int64
	lock sync.Mutex
)

//普通版加函数
func add() {
	sum = sum + 1
	wg.Done()
}

//互斥锁版加函数
func mutexAdd() {
	lock.Lock()
	sum = sum + 1
	lock.Unlock()
	wg.Done()
}

// 原子操作版加函数
func atomicAdd() {
	atomic.AddInt64(&sum, 1)
	wg.Done()
}

func Problem2() {
	start := time.Now()
	defer func() {
		fmt.Println(time.Since(start))
	}()

	for i := 0; i < 1000000; i++ {
		wg.Add(1)
		//go mutexAdd()
		go atomicAdd()
	}
	wg.Wait()
	fmt.Println(sum)
}
